package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import malagaAcoge.model.entities.Documento;
import malagaAcoge.utils.JPAUtils;

public class DocumentoDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public DocumentoDao() {
		jpaUtils = new JPAUtils();

	}

	@SuppressWarnings("unchecked")
	public static List<Documento> findAll() {
		List<Documento> documentos = new ArrayList<Documento>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em.createQuery("select u from Documento u");
			documentos = q.getResultList();
		} catch (Exception e) {
			System.out.println("Error en metodo findAllDocumento");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return documentos;

	}

	public static Documento findDocumento(int id) {
		Documento documento = null;
		try {
			em = jpaUtils.getEntityManager();
			documento = (Documento) em.find(Documento.class, id);
		} catch (Exception e) {
			System.out.println("Error en metodo findDocumento");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return documento;

	}

	public static void createDocumento(Documento documento) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(documento);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createDocumento:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updateDocumento(Documento documento) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(documento);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo updateDocumento:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteDocumento(int idDocumento) {
		try {
			em = jpaUtils.getEntityManager();
			Documento documento = em.find(Documento.class, idDocumento);
			if (documento != null) {
				em.getTransaction().begin();
				em.remove(documento);
				em.getTransaction().commit();
			}
		} catch (Exception e) {
			System.out.println("Error en metodo deleteDocumento:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void mergeDocumento(Documento documento) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(documento);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo updateDocumento:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}
}
